Plotting Scenario Data¶
The plotting functions use the analysis modules to process data. We have a demo folder that encloses numerous notebooks that we hope will help you analyze/display your scenario data.
Single Scenario¶
Transmission¶
get a power flow snapshot (notebook)
from bokeh.io import show import pandas as pd from postreise.plot.plot_powerflow_snapshot import plot_powerflow_snapshot from powersimdata import Scenario scenario = Scenario(3287) grid = scenario.get_grid() pf_map = plot_powerflow_snapshot( scenario, pd.Timestamp(2016, 11, 2, 22), legend_font_size=20 ) show(pf_map)
Emission¶
show carbon emission by generator type using circles overlay on a map (notebook)
from bokeh.io import show from postreise.plot.plot_carbon_map import map_carbon_emission_generator from powersimdata import Scenario scenario = Scenario(3287) emission_map = map_carbon_emission_generator( scenario, coordinate_rounding=0, scale_factor=0.75 ) show(emission_map)
Bokeh Plot
Generation¶
plot stacked generation time series in an area (notebook)
from postreise.plot.plot_generation_ts_stack import ( plot_generation_time_series_stack, ) from powersimdata import Scenario t2c = { "nuclear": "#173FA5", "hydro": "#0090FF", "geothermal": "#CC67F3", "other": "#8B36FF", "dfo": "#31E8CB", "coal": "#37404C", "ng": "#72818F", "solar": "#FFBB45", "wind": "#78D911", "solar_curtailment": "#FFBB45", "wind_curtailment": "#78D911", } t2l = { "nuclear": "Nuclear", "hydro": "Hydro", "geothermal": "Geothermal", "other": "Other", "dfo": "Distillate Fuel Oil", "coal": "Coal", "ng": "Natural Gas", "solar": "Solar", "wind": "Wind", "wind_offshore": "Wind Offshore", "biomass": "Biomass", "storage": "Storage", "solar_curtailment": "Solar Curtailment", "wind_curtailment": "Wind Curtailment", "wind_offshore_curtailment": "Offshore Wind Curtailment", } t2hc = { "solar_curtailment": "#996100", "wind_curtailment": "#4e8e0b" } scenario = Scenario(1171) resources = [ "nuclear", "coal", "hydro", "geothermal", "other", "dfo", "ng", "solar", "wind", "storage", "solar_curtailment", "wind_curtailment", ] plot_generation_time_series_stack( scenario, "Western", resources, time_freq="D", normalize=True, t2c=t2c, t2l=t2l, t2hc=t2hc )
Curtailment¶
plot renewable generators curtailment time series in an area (notebook)
import matplotlib.pyplot as plt from postreise.plot.plot_curtailment_ts import plot_curtailment_time_series from powersimdata import Scenario scenario = Scenario(403) t2c = {"wind_curtailment": "blue", "solar_curtailment": "blue"} plot_curtailment_time_series( scenario, "Eastern", ["wind","solar"], time_freq='D', t2c=t2c, label_fontsize=30, title_fontsize=35, tick_fontsize=25, legend_fontsize=25, ) plt.show()
Price¶
map locational marginal price (notebook)
from bokeh.io import show from postreise.plot.plot_lmp_map import map_lmp from powersimdata import Scenario scenario = Scenario(3287) lmp_map = map_lmp(scenario) show(lmp_map)
Bokeh Plot
General¶
plot any time-series values using a heatmap where each column is one color-coded day (notebook)
import matplotlib.pyplot as plt from powersimdata import Scenario from postreise.analyze.generation.curtailment import ( calculate_curtailment_time_series, ) from postreise.plot.plot_heatmap import plot_heatmap scenario = Scenario(3287) curtailment = calculate_curtailment_time_series(scenario).sum(axis=1) plot_heatmap( curtailment, cmap="PiYG_r", scale=1e-3, cbar_label="GW", vmin=0, vmax=250, cbar_tick_values=[0, 50, 100, 150, 200, 250], cbar_tick_labels=['0', '50', '100', '150', '200', '≥250'], time_zone="ETC/GMT+6", time_zone_label="(CST)", contour_levels=[250], )
map transmission lines color coded by interconnection
from bokeh.io import show from postreise.plot.plot_interconnection_map import map_interconnections from powersimdata import Scenario scenario = Scenario(3287) grid = scenario.get_grid() transmission_map = map_interconnections(grid) show(transmission_map)
Bokeh Plot
Scenarios Comparison¶
Generator Capacity and Generation¶
compare generation and capacity in various scenarios through bar charts (notebook)
from postreise.plot.plot_bar_generation_vs_capacity import ( plot_bar_generation_vs_capacity, ) from powersimdata.utility.helpers import PrintManager with PrintManager(): plot_bar_generation_vs_capacity( areas=["CA", "Western"], scenario_ids=[2497, 3101], scenario_names=[ "Western 90% clean and 10% nuclear", "Western 90% clean and 10% nuclear with transmission upgrade", ], )
compare generation and capacity in various scenarios through pie charts (notebook)
from postreise.plot.plot_pie_generation_vs_capacity import ( plot_pie_generation_vs_capacity, ) from powersimdata.utility.helpers import PrintManager with PrintManager(): plot_pie_generation_vs_capacity( areas=["WA", "Western"], scenario_ids=[2497, 3101], scenario_names=[ "Western 90% clean and 10% nuclear", "Western 90% clean and 10% nuclear \n with transmission upgrade", ], )
compare generation shortfall in various scenarios through bar charts (notebook)
import inspect import os from powersimdata.utility.helpers import PrintManager import postreise from postreise.plot.plot_bar_shortfall import plot_bar_shortfall from powersimdata.design.generation.clean_capacity_scaling import ( load_targets_from_csv, ) data = os.path.join(os.path.dirname(inspect.getfile(postreise)), "data") target = load_targets_from_csv( os.path.join(data, "2030_USA_Clean_Energy_Regular_Targets.csv") ) with PrintManager(): plot_bar_shortfall( "Nevada", [2497, 3101], target, scenario_names=[ "Western 90% clean and 10% nuclear", "Western 90% clean and 10% nuclear" + "\n" + "with transmission upgrade", ], baseline_scenario=2497, baseline_scenario_name="Western 90% clean and 10% nuclear", )
Emission¶
compare total carbon emissions by generator type for 1-to-n scenarios through bar charts (notebook)
from postreise.plot.plot_carbon_bar import plot_carbon_bar from powersimdata import Scenario from powersimdata.utility.helpers import PrintManager scenarioA = Scenario(2497) scenarioB = Scenario(3101) with PrintManager(): scenarioA = Scenario(2497) scenarioB = Scenario(3101) plot_carbon_bar( scenarioA, scenarioB, labels=["Western" + "\n" + "90% clean and 10% nuclear", "Western" + "\n" + "90% clean and 10% nuclear" + "\n" + "with transmission upgrade"] )
compare carbon emission by generator type for two scenarios on a map (notebook)
from bokeh.io import show from postreise.plot.plot_carbon_map import map_carbon_emission_difference from powersimdata import Scenario scenarioA = Scenario(2497) scenarioB = Scenario(3101) emission_difference_map = map_carbon_emission_difference( scenarioA, scenarioB, coordinate_rounding=0 ) show(emission_difference_map)
Bokeh Plot plot stacked generation and carbon emission for 1-to-n scenarios side-by-side (notebook)
from postreise.plot.plot_energy_carbon_stack import plot_n_scenarios from powersimdata import Scenario scenarioA = Scenario(2497) scenarioB = Scenario(3101) plot_n_scenarios(scenarioA, scenarioB)